from django.core.mail import send_mail
from celery_tasks.main import app
from meiduo_mall.settings import EMAIL_FROM
import logging
logger = logging.getLogger('django')

'''
完整版异步Celery执行任务, 之前的短信发送是简略版
'''
# bind：保证task对象会作为第一个参数自动传入
# name：异步任务别名
# retry_backoff：异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s
# max_retries：异常自动重试次数的上限
@app.task(bind=True, name='send_verify_email', retry_backoff=3)
def send_verify_email(self, email, verify_url):
        # send_mail中的参数解释
        # subject: 邮件主题
    subject = '美多商城激活邮件'
        # message: 邮件内容
    message = ''
        # from_email: 发件人
    from_email = EMAIL_FROM
        # recipient_list: 收件人列表
    recipient_list = [email]
        # html_message: 邮件中的html内容
    html_message = '<p>尊敬的用户您好！</p>' \
                   '<p>感谢您使用美多商城。</p>' \
                   '<p>您的邮箱为：%s 。请点击此链接激活您的邮箱：</p>' \
                   '<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url)
    try:
        # 发送验证邮件, 传入参数
        send_mail(subject, message, from_email, recipient_list,
                  html_message=html_message)
    except Exception as e:
        logger.error(e)
        # 有异常自动重试3次
        raise self.retry(exc=e, max_retries=3)


